/**
 * 设置 sessionStorage 项
 * @param key 键
 * @param value 值
 */
export function setItem(key: string, value: any): void {
  try {
    let stringValue: string

    // 检查 value 是否为 Map 对象
    if (value instanceof Map) {
      // 将 Map 对象转换为普通对象
      const obj = Object.fromEntries(value)
      stringValue = JSON.stringify({ type: 'Map', data: obj })
    } else {
      // 对于其他类型对象，直接序列化
      stringValue = JSON.stringify(value)
    }

    sessionStorage.setItem(key, stringValue)
  } catch (error) {
    console.error('设置 sessionStorage 项失败:', error)
  }
}

/**
 * 获取 sessionStorage 项
 * @param key 键
 * @param defaultValue 默认值
 * @returns 值
 */
export function getItem(key: string, defaultValue: any): any {
  try {
    const value = sessionStorage.getItem(key)
    if (value) {
      if (value === 'true') return true
      if (value === 'false') return false

      try {
        const parsedValue = JSON.parse(value)
        if (parsedValue.type === 'Map') {
          // 将普通对象转换回 Map 对象
          return new Map(Object.entries(parsedValue.data))
        } else {
          return parsedValue
        }
      } catch (e) {
        return value
      }
    } else {
      return defaultValue
    }
  } catch (error) {
    console.error('获取 sessionStorage 项失败:', error)
    return defaultValue
  }
}

/**
 * 删除 sessionStorage 项
 * @param key 键
 */
export function removeItem(key: string): void {
  try {
    sessionStorage.removeItem(key)
  } catch (error) {
    console.error('删除 sessionStorage 项失败:', error)
  }
}

/**
 * 清空 sessionStorage
 */
export function clear(): void {
  try {
    sessionStorage.clear()
  } catch (error) {
    console.error('清空 sessionStorage 失败:', error)
  }
}
